home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / 061-070 / amok66 / menu / xintui.mod < prev    next >
Text File  |  1993-11-04  |  6KB  |  167 lines

  1. (* ------------------------------------------------------------------------
  2.    :Program.      xIntui.
  3.    :Contents.     Hilfsproceduren zum Umgang mit Intuition.
  4.    :Author.       Klaus Hlawaty.
  5.    :Address.      Waldhof
  6.    :Address.      3579 Schrecksbach
  7.    :History.      v1.0 - 20.Nov.91
  8.    :Copyright.    PD.
  9.    :Language.     Oberon.
  10.    :Translator.   OBERON v2.13 / OLink v2.13d
  11.    :Imports.      Speed.
  12. ------------------------------------------------------------------------ *)
  13. MODULE xIntui;
  14.  
  15. IMPORT
  16.       e : Exec,
  17.       g : Graphics,
  18.       i : Intuition,
  19.      ng : Requests,
  20.           NoGuruRq,
  21.           Speed,
  22.     str : Strings,
  23.       s : SYSTEM;
  24.  
  25. (* ======================================================================= *)
  26. (* ========================== Proceduren ================================= *)
  27. (* ======================================================================= *)
  28.  
  29. (* $CopyArrays- *)
  30. PROCEDURE StrToPtr*(Text : ARRAY OF CHAR) : e.STRPTR;
  31. (* ------------------------------------------------------------------------
  32.    :Input.     Text  : String.
  33.    :Output.    RETURN: Zeiger auf den Speicherbereich des STRPTR's.
  34.    :Semantic.  Legt einen String im Speicher ab.
  35.    :Remark.    verhindert doppelte Speicherfreigabe ???
  36. ------------------------------------------------------------------------ *)
  37. VAR
  38.     Str   : e.STRPTR;
  39.  
  40. BEGIN
  41.   NEW(Str); (* := New(s.SIZE(e.STRING),e.any);*)
  42.     ng.Assert(Str # NIL, "StrToPtr: Kein RAM für den Text");
  43.     Speed.Fill(0,s.SIZE(Str^),Str^,Speed.Byte);
  44.     Speed.StrCopy(Text,Str^);
  45.   RETURN Str;
  46. END StrToPtr;
  47.  
  48. (* $CopyArrays- *)
  49. PROCEDURE TextToIntui*(Text     : ARRAY OF CHAR;
  50.                        MenuText : BOOLEAN) : i.IntuiTextPtr;
  51. (* ------------------------------------------------------------------------
  52.   :Input.     Text     : String der in IntuiText gespeichert werden soll.
  53.   :Input.     MenuText : FALSE = Normaler Text / TRUE = Menu-Text.
  54.   :Output.    RETURN   : Zeiger auf die IntuiTextStructur.
  55.   :Semantic.  Erzeugt IntuiTextStructur.
  56. ------------------------------------------------------------------------ *)
  57. VAR
  58.     Intui : i.IntuiTextPtr;
  59.  
  60. BEGIN
  61.   NEW(Intui); (* := New(s.SIZE(i.IntuiText),e.any);*)
  62.   ng.Assert(Intui # NIL, "TextToIntui: Kein RAM für IntuiTexT");
  63.   IF(MenuText)THEN
  64.     Intui.frontPen  := 0   ;
  65.     Intui.backPen   := 1   ;
  66.   ELSE
  67.     Intui.frontPen  := 1   ;
  68.     Intui.backPen   := 0   ;
  69.   END (* IF MenuText *);
  70.   Intui.drawMode  := g.jam1;
  71.   Intui.leftEdge  := 0   ;
  72.   Intui.topEdge   := 0   ;
  73.   Intui.iTextFont := NIL ;
  74.   Intui.iText     := StrToPtr(Text) ;
  75.   Intui.nextText  := NIL ;
  76.  RETURN Intui;
  77. END TextToIntui;
  78.  
  79. (* $CopyArrays- *)
  80. PROCEDURE FillMenu* (Menu     : i.MenuPtr;
  81.                      Text     : ARRAY OF CHAR;
  82.                      leftEdge,
  83.                      width    : INTEGER
  84.                      );
  85. (* ------------------------------------------------------------------------
  86.    :Input.     Menu     : Zeiger auf 'leere' Menu-Structur.
  87.    :Input.     Text     : Text des Menüs.
  88.    :Input.     leftEdge : Begin des Menües.
  89.    :Input.     width    : Breite des Menües.
  90.    :Output.    Menu     : Zeiger auf ausgefülltes Menu.
  91.    :Semantic.  Füllt die Menü-Structur
  92.    :Remark.    Wird sowohl von AddMenu als auch von InitMenu benutzt.
  93.    :Remark.    Das Menu von InitMenu ist jedoch erweitert.
  94. ------------------------------------------------------------------------ *)
  95. BEGIN
  96.     Menu^.nextMenu  := NIL;
  97.     Menu^.leftEdge  := leftEdge;
  98.     Menu^.topEdge   := 0;                       (* Not used ? *)
  99.     Menu^.width     := width;
  100.     Menu^.height    := 0;                       (* Not used ? *)
  101.     Menu^.flags     := {i.menuEnabled};         (* ? *)
  102.     Menu^.menuName  := StrToPtr(Text);
  103.     Menu^.firstItem := NIL;
  104. END FillMenu;
  105.  
  106. (* $CopyArrays- *)
  107. PROCEDURE FillItem*(item      : i.MenuItemPtr;
  108.                     Text      : ARRAY OF CHAR;
  109.                     leftEdge,
  110.                     topEdge,
  111.                     width,
  112.                     height    : INTEGER;
  113.                     Flags     : SET;
  114.                     MutualEx  : LONGSET;
  115.                     Command   : CHAR);
  116. (* ------------------------------------------------------------------------
  117.   :Input.     item     : Itemadresse wird übereicht.
  118.   :Input.     Text     : Text des Menü-Items.
  119.   :Input.     leftEdge : Begin des Menü-Items links.
  120.   :Input.     topEdge  : Begin des Menü-Items oben.
  121.   :Input.     width    : Breite des Menü-Items.
  122.   :Input.     height   : Tiefe des Menü-Items.
  123.   :Input.     Flags    : Item-Flags.
  124.   :Input.     MutualEx : MutualExclude-Bits.
  125.   :Input.     Command  : ShortCut.
  126.   :Input.     Kennung  : Kennung # 0.
  127.   :Output.    item     : Das Item wird gefüllt.
  128.   :Semantic.  Füllt Item-Structur.
  129. ------------------------------------------------------------------------ *)
  130. BEGIN
  131.     item.nextItem      := NIL;
  132.     item.leftEdge      := leftEdge;
  133.     item.topEdge       := topEdge;
  134.     item.width         := width;
  135.     item.height        := height;
  136.     INCL(Flags,i.itemText);         (* Behandle nur TextItems *)
  137.     IF(Command # "\o")THEN
  138.       INCL(Flags,i.commSeq);
  139.     END (* IF *);
  140.     item.flags         := Flags;
  141.     item.mutualExclude := MutualEx;
  142.     item.itemFill      := TextToIntui(Text,TRUE);
  143.     item.selectFill    := NIL;
  144.     item.command       := Command;
  145.     item.subItem       := NIL;
  146. END FillItem;
  147.  
  148. PROCEDURE decodeMenu*(    code  : INTEGER;
  149.                       VAR Menu,
  150.                           Item,
  151.                           SubI  : INTEGER);
  152. (* ------------------------------------------------------------------------
  153.   :Input.     code     : aus IntuiMessage.
  154.   :Output.    Menu     : Nummer des Menü's    [0 .. n].
  155.   :Output.    Item     : Nummer des Item's    [0 .. n].
  156.   :Output.    SubI     : Nummer des SubItem's [0 .. n].
  157.   :Semantic.  Decodiert den code der IntuiMessage für Menü's.
  158. ------------------------------------------------------------------------ *)
  159. BEGIN
  160.    Menu := i.MenuNum(code);
  161.    Item := i.ItemNum(code);
  162.    SubI := i.SubNum(code);
  163. END decodeMenu;
  164.  
  165. END xIntui.
  166.  
  167.